package com.guc.md.utils

import android.view.View
import android.widget.TextView
import com.google.android.material.snackbar.Snackbar
import com.guc.md.R

/**
 * Created by guc on 2021/5/27.
 * Description：Snackbar工具
 */
object SnackbarUtil {
    const val INFO = 1
    const val CONFIRM = 2
    const val WARNING = 3
    const val ALERT = 4

    const val BLUE = 0xff2195f3
    const val RED = 0xfff44336
    const val GREEN = 0xff4caf50
    const val ORANGE = 0xffffc107

    /**
     * 短显示Snackbar，自定义颜色
     * @param view
     * @param msg
     * @param msgColor
     * @param bgColor
     * @return
     */
    fun ShortSnackbar(view: View, msg: String, msgColor: Int? = null, bgColor: Int? = null) =
        Snackbar.make(view, msg, Snackbar.LENGTH_SHORT).apply {
            setSnackbarColor(this, msgColor, bgColor)
        }

    /**
     * 长显示Snackbar，自定义颜色
     * @param view
     * @param msg
     * @param msgColor
     * @param bgColor
     * @return
     */
    fun LongSnackbar(view: View, msg: String, msgColor: Int? = null, bgColor: Int? = null) =
        Snackbar.make(view, msg, Snackbar.LENGTH_LONG).apply {
            setSnackbarColor(this, msgColor, bgColor)
        }

    /**
     * 自定义时长显示Snackbar，自定义颜色
     * @param view
     * @param msg
     * @param duration  显示时长
     * @param msgColor
     * @param bgColor
     * @return
     */
    fun IndefiniteSnackbar(
        view: View,
        msg: String,
        duration: Int = 2000,
        msgColor: Int? = null,
        bgColor: Int? = null
    ) =
        Snackbar.make(view, msg, Snackbar.LENGTH_INDEFINITE).apply {
            setDuration(duration)
            setSnackbarColor(this, msgColor, bgColor)
        }


    /**
     * 设置Snackbar文字和背景颜色
     * @param snackbar
     * @param msgColor  信息颜色
     * @param bgColor   背景色
     */
    fun setSnackbarColor(snackbar: Snackbar, msgColor: Int?, bgColor: Int?) {
        snackbar.view.apply {
            bgColor?.run {
                setBackgroundColor(this)
            }
            msgColor?.run {
                findViewById<TextView>(R.id.snackbar_text).setTextColor(this)
            }
        }
    }

    /**
     * 短显示Snackbar，可选预设类型
     * @param view
     * @param msg
     * @param type  类型：Snackbar.INFO Snackbar.CONFIRM Snackbar.WARNING Snackbar.ALERT
     * @return
     */
    fun ShortSnackbar(view: View, msg: String, type: Int) =
        Snackbar.make(view, msg, Snackbar.LENGTH_SHORT).apply {
            switchType(this, type)
        }


    /**
     * 长显示Snackbar，可选预设类型
     * @param view
     * @param msg
     * @param type  类型：Snackbar.INFO Snackbar.CONFIRM Snackbar.WARNING Snackbar.ALERT
     * @return
     */
    fun LongSnackbar(view: View, msg: String, type: Int) =
        Snackbar.make(view, msg, Snackbar.LENGTH_LONG).apply {
            switchType(this, type)
        }

    /**
     * 自定义时长显示Snackbar，自定义颜色
     * @param view
     * @param msg
     * @param duration  显示时长
     * @param msgColor
     * @param bgColor
     * @return
     */
    fun IndefiniteSnackbar(
        view: View,
        msg: String,
        type: Int,
        duration: Int = 2000,
    ) =
        Snackbar.make(view, msg, Snackbar.LENGTH_INDEFINITE).apply {
            setDuration(duration)
            switchType(this, type)
        }

    /**
     * 预设类型
     */
    private fun switchType(snackbar: Snackbar, type: Int) {
        var bgColor = BLUE
        when (type) {
            INFO -> bgColor = BLUE
            CONFIRM -> bgColor = GREEN
            WARNING -> bgColor = ORANGE
            ALERT -> bgColor = RED
        }
        snackbar.view.setBackgroundColor(bgColor.toInt())
    }

}